package com.yfbao.horizon.inspection.repository;

import com.yfbao.horizon.inspection.entity.SystemInspectRecord;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;

/**
 * 系统检测记录数据访问接口
 */
@Repository
public interface SystemInspectRecordRepository extends JpaRepository<SystemInspectRecord, Long>, JpaSpecificationExecutor<SystemInspectRecord> {

    /**
     * 根据环境和分类查询检测记录
     * @param inspectEnv 巡检环境
     * @param inspectCategory 巡检分类
     * @return 检测记录列表
     */
    List<SystemInspectRecord> findByInspectEnvAndInspectCategory(String inspectEnv, String inspectCategory);

    /**
     * 根据检测项查询检测记录
     * @param inspectItem 检测项
     * @return 检测记录列表
     */
    List<SystemInspectRecord> findByInspectItem(String inspectItem);

    /**
     * 根据环境、分类和检测项查询检测记录
     * @param inspectEnv 巡检环境
     * @param inspectCategory 巡检分类
     * @param inspectItem 检测项
     * @return 检测记录列表
     */
    List<SystemInspectRecord> findByInspectEnvAndInspectCategoryAndInspectItem(String inspectEnv, String inspectCategory, String inspectItem);

    /**
     * 根据采集时间范围查询检测记录
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 检测记录列表
     */
    List<SystemInspectRecord> findByCollectTimeBetween(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 查询指定环境、分类和检测项的最新检测记录
     * @param inspectEnv 巡检环境
     * @param inspectCategory 巡检分类
     * @param inspectItem 检测项
     * @return 最新的检测记录
     */
    Optional<SystemInspectRecord> findFirstByInspectEnvAndInspectCategoryAndInspectItemOrderByCollectTimeDesc(String inspectEnv, String inspectCategory, String inspectItem);

    /**
     * 根据检测结果查询检测记录
     * @param inspectItemResult 检测项结果
     * @return 检测记录列表
     */
    List<SystemInspectRecord> findByInspectItemResult(String inspectItemResult);

    /**
     * 查询指定时间段内的过期记录
     * @param beforeTime 过期时间
     * @return 过期的检测记录列表
     */
    List<SystemInspectRecord> findByCollectTimeBefore(LocalDateTime beforeTime);

    /**
     * 根据环境和过期时间删除记录
     * @param inspectEnv 巡检环境
     * @param beforeTime 过期时间
     * @return 删除的记录数
     */
    int deleteByInspectEnvAndCollectTimeBefore(String inspectEnv, LocalDateTime beforeTime);

    /**
     * 根据分类和过期时间删除记录
     * @param inspectCategory 巡检分类
     * @param beforeTime 过期时间
     * @return 删除的记录数
     */
    int deleteByInspectCategoryAndCollectTimeBefore(String inspectCategory, LocalDateTime beforeTime);
}